#pragma once

#include "API.h"
#include "Direction.h"

namespace snake
{

  class Problem;

  /**
    Interface ISolver - solves given problem, return solution
  */
  struct SNAKE_API ISolver
  {
    virtual ~ISolver() {}

    virtual EDirection Solve(const Problem &problem) = 0;
    virtual std::pair<int, int> GetHeadPosition(const snake::Problem &problem) = 0;
    virtual EDirection GetCurrentDirection(const Problem &problem) = 0;
    virtual bool CheckForCrash(const Problem& problem) = 0;
    };

}